/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Comun;

import java.awt.event.KeyEvent;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 *
 * @author Andre
 */
public class Funciones_Comunes {

    //Funcion que se debe usar cuando se le de al boton aceptar
    //aunque ya deberia estar validado
    public static boolean isNumeric(String strCadena) {
        try {
            Integer.parseInt(strCadena);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    public static double round(double d, int decimalPlace) {
        // see the Javadoc about why we use a String in the constructor
        // http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double)
        BigDecimal bd = new BigDecimal(Double.toString(d));
        bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
        return bd.doubleValue();
    }

    /*

     * Funcion que devuelve true si se ingresan solo letras y vocales con sus
     * tildes correspondientes, false si es otro tipo de caracter

     */
    public static boolean validaCaracteresValidos(KeyEvent e) {
        char caracter = e.getKeyChar();


        if (((caracter < 'a') || (caracter > 'z')) &&
                ((caracter < 'A') || (caracter > 'Z')) &&
                (caracter != KeyEvent.VK_BACK_SPACE) &&
                (caracter != '-') &&
                (caracter != '.') &&
                (caracter != KeyEvent.VK_SPACE) &&
                (caracter != 'á') &&
                (caracter != 'é') &&
                (caracter != 'í') &&
                (caracter != 'ó') &&
                (caracter != 'ú')) {
            GUI.msjAlerta("Debe ingresar una letra");
            e.consume();
            return false;

        } else {
            return true;
        }
    }

    /*
    Funcion que devuelve true solo si la cadena es numerica
     */
    public static boolean validaCadenaNumericaEntera(KeyEvent e) {
        char caracter = e.getKeyChar();
        if ((caracter != '0') &&
                (caracter != '1') &&
                (caracter != '2') &&
                (caracter != '3') &&
                (caracter != '4') &&
                (caracter != '5') &&
                (caracter != '6') &&
                (caracter != '7') &&
                (caracter != '8') &&
                (caracter != '9') &&
                (caracter != KeyEvent.VK_BACK_SPACE) &&
                (caracter != KeyEvent.VK_SPACE)) {
            GUI.msjAlerta("Debe ingresar un número");
            e.consume();
            return false;
        } else {

            return true;

        }

    }

    //Funcion que valida el tamaño de un JtextField true si au
    public static boolean validaTamannoJText(KeyEvent evt, JTextField txtField, int tammano) {
        //Verificamos ante

        char caracter = evt.getKeyChar();
        if (caracter != KeyEvent.VK_BACK_SPACE) {
            if (txtField.getText().trim().length() >= tammano) {

                JOptionPane.showMessageDialog(null, "Ingrese menos de " + tammano + " carácteres", "Mensaje", 1);
                return false;
            }
        }
        return true;
    }

    public static boolean validaTamannoJTextArea(KeyEvent evt, JTextArea txtField, int tammano) {

        if (txtField.getText().trim().length() >= tammano) {

            evt.consume();

            JOptionPane.showMessageDialog(null, "Ingrese menos de " + tammano + " carácteres", "Mensaje", 1);
            txtField.setText(txtField.getText().trim().substring(0, tammano - 1));

            return false;
        }
        return true;
    }

    public static boolean isFloatPositivo(String strCadena) {
        try {
            if (Float.parseFloat(strCadena) > 0);

        } catch (Exception e) {
            GUI.msjAlerta("Debe ser un numero real");
            return false;
        }
        return true;
    }

    public static boolean isFloatPositivo2(String strCadena, String strCampo) {
        try {
            if (Float.parseFloat(strCadena) > 0);

        } catch (Exception e) {
            GUI.msjAlerta("El campo " + strCampo +" debe ser un numero real");
            return false;
        }
        return true;
    }

    public static boolean esVacio(String strCadena) {
        return strCadena.equals("");
    }

    public static boolean existeEnArregloDeString(String strCadena, String[] arreglo) {
        if ((strCadena == null) || (arreglo == null)) {
            return false;
        }
        for (String elemento : arreglo) {
            if (strCadena.equals(elemento)) {
                return true;
            }
        }
        return false;
    }

    public static void validaSoloEnteros(JTextField txtJField, KeyEvent evt) {

        char caracter = evt.getKeyChar();

        // Verificar si la tecla pulsada no es un digito
        if (((caracter < '0') || (caracter > '9')) && (caracter != KeyEvent.VK_BACK_SPACE)) {
            GUI.msjAlerta("Debe ingresar un numero");
            int fin = txtJField.getText().length() - 1;
            txtJField.setText(txtJField.getText().substring(0, fin));
        }
    }

    public static void validaSoloFloats(JTextField txtJField, KeyEvent evt) {

        char caracter = evt.getKeyChar();

        // Verificar si la tecla pulsada no es un digito
        if (((caracter < '0') || (caracter > '9')) && (caracter != KeyEvent.VK_BACK_SPACE)) {
            if (caracter != '.') {
                GUI.msjAlerta("Debe ingresar un numero");
                int fin = txtJField.getText().length() - 1;
                txtJField.setText(txtJField.getText().substring(0, fin));

            }
        }

    }

    public static void validarSoloLetras(JTextField txtJField, KeyEvent evt) {
        int k = (int) evt.getKeyChar();
        if (k > 47 && k < 58) {
            evt.setKeyChar((char) KeyEvent.VK_CLEAR);
            GUI.msjAlerta("Debe ingresar una letra");
            int fin = txtJField.getText().length() - 1;
            txtJField.setText(txtJField.getText().substring(0, fin));
        }
        if (k == 10) {
            txtJField.transferFocus();
        }
    }

    // Metodo generico para validar el tamanho de los JTextField y JTextArea
    // ver ejemplo de Frm_RegistrarCargo
    public static boolean validarTextField(String strText, String comparacion, int intNumCaractes, String campo) {

        boolean bolRespuesta = true;

        if (comparacion.equals("mayor")) {
            if (strText.length() == 0) {
//               GUI.msjAlerta("El campo " + campo + " debe tener más de " + Integer.toString(intNumCaractes)  + " caracteres" );
                GUI.msjAlerta("El campo " + campo + " debe ser diferente de vacio");
                bolRespuesta = false;
            }

            if (strText.length() < intNumCaractes) {
//               GUI.msjAlerta("El campo " + campo + " debe tener más de " + Integer.toString(intNumCaractes)  + " caracteres" );
                GUI.msjAlerta("El campo " + campo + " debe tener entre 1 y " + Integer.toString(intNumCaractes) + " caracteres");
                bolRespuesta = false;
            }
        }

        if (comparacion.equals("menor")) {
            if (strText.length() > intNumCaractes) {
//               GUI.msjAlerta("El campo " + campo + " debe tener menos de " + Integer.toString(intNumCaractes)  + " caracteres" );
                GUI.msjAlerta("El campo " + campo + " debe tener entre 1 y " + Integer.toString(intNumCaractes) + " caracteres");
                bolRespuesta = false;
            }
        }

        if (comparacion.equals("igual")) {
            if (strText.length() != intNumCaractes) {
                GUI.msjAlerta("El campo " + campo + " debe tener " + Integer.toString(intNumCaractes) + " caracteres exactos");
                bolRespuesta = false;
            }
        }

        return bolRespuesta;
    }

    public static boolean validarCombo(String strItem, String comparacion, String campo) {
        boolean bolRespuesta = true;

        if (comparacion.equals("<Seleccionar>")) {
            if (comparacion.equals(strItem)) {
                GUI.msjAlerta("El campo " + campo + " debe ser diferente de " + comparacion);
                bolRespuesta = false;
            }
        } else if (comparacion.equals(strItem)) {
            bolRespuesta = false;
        }

        return bolRespuesta;
    }
    
        public static boolean validarComboInicializar(String strItem, String comparacion) {
        boolean bolRespuesta = true;

        if (comparacion.equals("<Seleccionar>")) {
            if (comparacion.equals(strItem)) {
                bolRespuesta = false;
            }
        } else if (comparacion.equals(strItem)) {
            bolRespuesta = false;
        }

        return bolRespuesta;
    }

    public static boolean validarRadioButton(boolean jrbMasculino,boolean jrbFemenino){
        boolean bolRepuesta=true;
        if(jrbFemenino && jrbMasculino){
            GUI.msjAlerta("Escoja una sola opcion");
            bolRepuesta=false;
        }else if(!jrbFemenino && !jrbMasculino){
            GUI.msjAlerta("Escoja al menos una opcion");
            bolRepuesta=false;
        }
        return bolRepuesta;
    }

    public static boolean validarDateChooser(Date fecha){
        boolean bolRespuesta=true;
        if(fecha==null){
            GUI.msjAlerta("Escoja una fecha de ingreso");
            bolRespuesta=false;
        }
        return bolRespuesta;
    }

    public static boolean validarComboSinMensaje(String strItem, String comparacion, String campo) {
        boolean bolRespuesta = true;

        if (comparacion.equals("<Seleccionar>")) {
            if (comparacion.equals(strItem)) {
                GUI.msjAlerta("Debe seleccionar alguna opción");
                bolRespuesta = false;
            }
        } else if (comparacion.equals(strItem)) {
            bolRespuesta = false;
        }

        return bolRespuesta;
    }

    public static String encriptarPass(String strPass) {
        byte[] buffer = strPass.getBytes();
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("SHA1");
        } catch (NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        }
        md.update(buffer);
        byte[] digest = md.digest();
        String hash = "";
        for (byte aux : digest) {
            int b = aux & 0xff;
            if (Integer.toHexString(b).length() == 1) {
                hash += "0";
            }
            hash += Integer.toHexString(b);
        }
        return hash;
    }

    //Metodo a dejar en desuso
    public static boolean validaTamannoJText(JTextField txtField, int tammano) {
        if (txtField.getText().trim().length() >= tammano) {
            JOptionPane.showMessageDialog(null, "Ingrese menos de " + tammano + " carácteres", "Mensaje", 1);
            txtField.setText(txtField.getText().trim().substring(0, tammano));
            return false;
        }
        return true;
    }

   
//    public static void validarEmail(KeyEvent evt, JTextField txtBox, String campo, boolean enableSpace) {
//        char c = evt.getKeyChar();
//
//        if (c == KeyEvent.VK_BACK_SPACE || c == KeyEvent.VK_DELETE || (c == '.' && (txtBox.getText().charAt(txtBox.getText().length() - 1) != '.')) || c == '-' || c == '_')
//            return;
//
//        if (((c == KeyEvent.VK_SPACE) && enableSpace) || ((txtBox.getText().indexOf('@') == -1) && (c == '@')))
//            return;
//
//        if (!Character.isLetterOrDigit(c) || (c == '@') || (c == '.')) {
//            if (c == '@')
//                GUI.msjAlerta("El campo "+ campo + " sólo se acepta un caracter @");
//            else
//                if (c == KeyEvent.VK_SPACE)
//                    GUI.msjAlerta("El campo "+ campo +" no acepta espacios en blanco");
//                else
//                    GUI.msjAlerta("El campo "+ campo +" tiene un formato de correo electrónico inválido");
//            evt.consume();
//        }
//    }
}
